MuSICA VCD File Format 解析情報

MSXマガジン標準ミュージックドライバー[MuSICA]
(C) Ascii corporation / 1990

独自の解析情報に、「MuSICA ドライバー部 音楽データ 仕様書」からの引用を加えた非公式文書です。

音色の数

音源 番号範囲 個数
OPLL 0 ~ 99 100個
PSG 0 ~ 29 30個
SCC 0 ~ 49 50個

VCDファイルの全体アドレスマップ

offset size 内容
+0000H 8 * 100 = 800 bytes OPLL 音色名 テーブル
+0320H 8 * 30 = 240 bytes PSG 音色名 テーブル
+0410H 8 * 50 = 400 bytes SCC 音色名 テーブル
+05A0H 8 * 100 = 800 bytes OPLL 音色データ テーブル
+08C0H 8 * 30 = 240 bytes PSG 音色データ テーブル
+09B0H 36 * 50 = 1800 bytes SCC 音色データ テーブル

合計 10B8H = 4280バイト

OPLL 音色データ Format (8 bytes)

1つの音色データは8バイトで構成されます。

OPLL(YM2413)のレジスタ00H~07Hの順に設定されます。

ofs. C/M bit76543210
+0 (M) AMVIBEGKSRMULtiple
+1 (C) AMVIBEGKSRMULtiple
+2 (M) KSLTotal Level
+3 (C) KSL0DCDMFeedBack(M)
+4 (M) Attack RateDecay Rate
+5 (C) Attack RateDecay Rate
+6 (M) Sustain LevelRelease Rate
+7 (C) Sustain LevelRelease Rate
  • (M): Modulator

  • (C): Carrier

  • Multiple値と周波数倍率の関係について、
    特殊なものは、0(半分)、10と11(10倍)、12と13(12倍)、14と15(15倍)。
    それ以外は指定値通りの倍率。

  • [BUG] MuSICAの音色エディタではDCとDMが入れ替わっているバグあり

ofs size bit name long name 補足
+0 1 7 AM (M) Amplitude Modulation (M) 音量ビブラート
1 6 VB (M) Vibrato (M) 音程ビブラート
1 5 EG (M) EG Type (M) 1なら減衰音
1 4 KSR(M) Key Scale Rate (M) 音程が高いほど変化が速い
4 3-0 MUL(M) Multiple (M) 周波数倍率
+1 1 7 AM (C) Amplitude Modulation (C) 音量ビブラート
1 6 VB (C) Vibrato (C) 音程ビブラート
1 5 EG (C) EG Type (C) 1なら減衰音
1 4 KSR(C) Key Scale Rate (C) 音程が高いほど変化が速い
3 3-0 MUL(C) Multiple (C) 周波数倍率
+2 2 7-6 KSL(M) Key Scale Level (M) 音程が高いほど出力が減衰
6 5-0 TL (M) Total Level (M) 出力を減衰
+3 2 7-6 KSL(C) Key Scale Level (C) 音程が高いほど出力が減衰
1 5 0 --- (-) 常に0
1 4 DC (C) Distortion (C) (C) 半波整流
1 3 DM (M) Distortion (M) (M) 半波整流
3 2-0 FB (M) FeedBack (M) フィードバック
+4 4 7-4 AR (M) Attack Rate (M) アタックレート
4 3-0 DR (M) Decay Rate (M) ディケィレート
+5 4 7-4 AR (C) Attack Rate (C) アタックレート
4 3-0 DR (C) Decay Rate (C) ディケィレート
+6 4 7-4 SL (M) Sustain Level (M) サスティンレベル
4 3-0 RR (M) Release Rate (M) リリースレート
+7 4 7-4 SL (C) Sustain Leve (C) サスティンレベル
4 3-0 RR (C) Release Rate (C) リリースレート

PSG 音色データ Format (8 bytes)

1つの音色データは6バイトで構成されます。

VCDファイルでは切りの良いように8バイト単位で配置されます。
(2バイトは余白になります)

オフセット 内容
+0 ソフトウェアエンベロープのアタックタイム
+1 ソフトウェアエンベロープのディケイタイム
+2 ソフトウェアエンベロープのサスティンレベル
+3 ソフトウェアエンベロープのリリースタイム
+4 ノイズの周波数
+5 トーン及び、ノイズのオン・オフ制御
(01H = Tone off
+6 空き
+7 空き
  • アタック、ディケイ、リリースは上位4ビットでカウンター、下位4ビットで音量の変化量を指定します。
    それぞれ値のとる範囲は1~15です。

    たとえば、カウンターの値が1で変化量が2の場合、
    1カウント(60分の1秒)で音量が2ずつ変化していく。

  • サスティンレベルは0~15で指定します。

  • ノイズの周波数は0~31で指定します。

  • トーンおよび、ノイズのオン・オフ制御は、

    ビット0でトーンを指定。
    ビット3でノイズを指定。

    ビットが0のときオン。
    ビットが1のときオフ。

  • その他のビットは0を指定しなければなりません。

参考: テストデータ

Editor(Decimal)       : Dump(0xHexadecimal)  
AR DR SL RR NF T   N  : at dt sl rt nz sw xx xx  
-----------------------------------------------  
00 00 00 00 00 off off: F1 F1 00 F1 00 09 00 00  
01 01 01 01 01 on  off: C1 C1 01 C1 01 08 00 00  
02 02 02 02 02 on  off: A1 A1 02 A1 02 08 00 00  
03 03 03 03 03 on  off: 91 91 03 91 03 08 00 00  
04 04 04 04 04 on  off: 81 81 04 81 04 08 00 00  
05 05 05 05 05 on  off: 71 71 05 71 05 08 00 00  
06 06 06 06 06 on  off: 61 61 06 61 06 08 00 00  
07 07 07 07 07 on  off: 51 51 07 51 07 08 00 00  
08 08 08 08 08 on  off: 41 41 08 41 08 08 00 00  
09 09 09 09 09 on  off: 72 72 09 72 09 08 00 00  
00 00 00 00 00 on  off: 31 31 0A 31 0A 08 00 00  
11 11 11 11 11 on  off: 52 52 0B 52 0B 08 00 00  
12 12 12 12 12 on  off: 21 21 0C 21 0C 08 00 00  
13 13 13 13 13 on  off: 53 53 0D 53 0D 08 00 00  
14 14 14 14 14 on  off: 32 32 0E 32 0E 08 00 00  
15 15 15 15 15 on  off: 43 43 0F 43 0F 08 00 00  
16 16 15 16 16 on  off: 11 11 0F 11 10 08 00 00  
17 17 15 17 17 on  off: 34 34 0F 34 11 08 00 00  
18 18 15 18 18 on  off: 23 23 0F 23 12 08 00 00  
19 19 15 19 19 on  off: 35 35 0F 35 13 08 00 00  
20 20 15 20 20 on  off: 12 12 0F 12 14 08 00 00  
21 21 15 21 21 on  off: 25 25 0F 25 15 08 00 00  
22 22 15 22 22 on  off: 13 13 0F 13 16 08 00 00  
23 23 15 23 23 on  off: 27 27 0F 27 17 08 00 00  
24 24 15 24 24 on  off: 14 14 0F 14 18 08 00 00  
25 25 15 25 25 on  off: 15 15 0F 15 19 08 00 00  
26 26 15 26 26 on  off: 16 16 0F 16 1A 08 00 00  
27 27 15 27 27 on  off: 17 17 0F 17 1B 08 00 00  
28 28 15 28 28 on  off: 18 18 0F 18 1C 08 00 00  
29 29 15 29 29 on  off: 19 19 0F 19 1D 08 00 00  
30 30 15 30 30 on  off: 1A 1A 0F 1A 1E 08 00 00  
31 31 15 31 31 on  off: 1C 1C 0F 1C 1F 08 00 00  
32 32 15 32 31 on  on : 1F 1F 0F 1F 1F 00 00 00  

*at/dt/rt: frame|value  
 ... 1FH -> add(or sub) 15 per 1 frame  
 ... 11H -> add(or sub) 1 per 1 frame  
 ... F1H -> add(or sub) 1 per 15 frame  

*AR: Attack Rate  
*DR: Decay Rate  
*SL: Sustain Level (Volume value)  
*RR: Release Rate  
*NF: Noise Freq. register value  

SCC 音色データ Format (4 + 32 = 36 bytes)

1つの音色データは36バイトで構成されます。

オフセット 内容
+0 ソフトウェアエンベロープのアタックタイム
+1 ソフトウェアエンベロープのディケイタイム
+2 ソフトウェアエンベロープのサスティンレベル
+3 ソフトウェアエンベロープのリリースタイム
+4~+35 波形データ
  • ソフトウェアエンベロープはPSG音源と同様です。

  • 波形データは、符号付8ビットの振幅データが32個で1周期を構成します。

  • チャンネル4、5はハードウェアの都合上同じデータを使用するため、後で設定された波形データが有効になります。

波形データテーブル例

+4:  80H = -127  
     81H = -126  
     ...  
     FEH =   -2  
     FFH =   -1  
     00H =    0  
     01H =   +1  
     02H =   +2  
     ...  
     7EH = +126  
+35: 7FH = +127